package com.prd.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * <p>
 * 客户总表
 * </p>
 *
 * @author o1
 * @since 2023-11-25
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("客户modelCustomerDTO")
public class CustomerDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 客户编号
     */
    @ApiModelProperty("客户编号")
    private String customerNo;

    /**
     * 所属公司或者门店编号
     */
    @ApiModelProperty("所属公司或者门店编号, 客户- customerBossNo对应 客户- customerNo")
    private String customerBossNo;

    /**
     * 公司名称
     */
    @ApiModelProperty("公司名称")
    private String companyName;

    /**
     * 主营类别
     */
    @ApiModelProperty("主营类别")
    private String companyCategories;

    /**
     * 主营类别id
     */
    @ApiModelProperty("主营类别id")
    private int companyCategoriesId;

    /**
     * 主营业务
     */
    @ApiModelProperty("主营业务")
    private String companyBusiness;

    /**
     * 年限（天）
     */
    @ApiModelProperty("年限（天）")
    private int companyYears;

    /**
     * 联系人列表
     */
    @ApiModelProperty("联系人列表")
    private List<CustomerGuestDTO> contactList;

    /**
     * 所属项目列表
     */
    @ApiModelProperty("所属项目列表")
    private List<CustomerProjectDTO> projectList;

    /**
     * 客户需求列表
     */
    @ApiModelProperty("客户需求列表")
    private List<CustomerRemarkDTO> customerRequireList;

    /**
     * 客户分析列表
     */
    @ApiModelProperty("客户分析列表")
    private List<CustomerRemarkDTO> customerAnalyzeList;

    /**
     * 客户备注列表
     */
    @ApiModelProperty("客户备注列表")
    private List<CustomerRemarkDTO> customerRemarkList;

    /**
     * 客户来源列表
     */
    @ApiModelProperty("客户来源列表")
    private List<CustomerContactDTO> customerSourceList;

    /**
     * 客户关系人列表
     */
    @ApiModelProperty("客户关系人列表")
    private List<CustomerContactDTO> customerRelevantList;

    /**
     * 来往沟通记录列表
     */
    @ApiModelProperty("来往沟通记录列表")
    private List<CustomerCommRecordDTO> customerCommRecordList;


    /**
     * 客户效益
     */
    @ApiModelProperty("客户效益")
    private int customerBenefits;

    /**
     * 客户类型: 项目类1，供应链类2，服务类3，渠道类4，消费类5
     */
    @ApiModelProperty("客户类型: 项目类1，供应链类2，服务类3，渠道类4，消费类5")
    private int customerType;

    /**
     * 客户类别: A类1，B类2，C类3 ... 
     */
    @ApiModelProperty("客户类别: A类1，B类2，C类3 ... ")
    private int customerLevel;

    /**
     * 客户地址
     */
    @ApiModelProperty("客户地址")
    private String customerAddress;

    /**
     * 客户状态：洽谈中客户1，被候选客户2，合作中客户3，潜在客户4，准落户5
     */
    @ApiModelProperty("客户状态：洽谈中客户1，被候选客户2，合作中客户3，潜在客户4，准落户5")
    private int customerStatus;

    /**
     * 客户行业
     */
    @ApiModelProperty("客户行业")
    private String customerIndustry;


    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date createTime;

    /**
     * 联系人/客人名称
     */
    @ApiModelProperty("联系人/客人名称")
    private String guestName;

    /**
     * 电话
     */
    @ApiModelProperty("电话")
    private String guestPhone;

    /**
     * 职务
     */
    @ApiModelProperty("职务")
    private String guestJob;

    /**
     * 客人备注
     */
    @ApiModelProperty("客人备注")
    private String guestRemark;


    /**
     * 业务负责人id
     */
    @ApiModelProperty("业务负责人id")
    private int businessManagerId;

    /**
     * 业务负责人
     */
    @ApiModelProperty("业务负责人")
    private String businessManager;

    /**
     * 业务部门
     */
    @ApiModelProperty("业务部门")
    private String businessDepartment;

    /**
     * 业务部门id
     */
    @ApiModelProperty("业务部门id")
    private int businessDepartmentId;

    /**
     * 业务负责人电话
     */
    @ApiModelProperty("业务负责人电话")
    private String businessPhone;

    /**
     * 业务进度:已成交1， 未成交2，拜访2，跟进3，采访4
     */
    @ApiModelProperty("业务进度:已成交1， 未成交2，拜访2，跟进3，采访4")
    private int businessStatus;

    /**
     * 最后来往日期
     */
    @ApiModelProperty("最后来往日期")
    private Date lastBusinessDay;

    /**
     * 是否收藏：已收藏1
     */
//    @ApiModelProperty("是否收藏：已收藏1")
//    private int isCollect;

    /**
     * 是否置顶：已置顶1
     */
//    @ApiModelProperty("是否置顶：已置顶1")
//    private int isPinTop;



    /**
     * '是否为简易报备, 是1
     */
    @ApiModelProperty("是否为简易报备, 是1")
    private Integer isSimple;

    /**
     * 状态：正常0，公共资源库1，已销户2，已隐藏3
     */
    @ApiModelProperty("状态：正常0，公共资源库1，已销户2，已隐藏3")
    private int status;

    @Override
    public int hashCode(){
        return Objects.hashCode(companyName) & Integer.MAX_VALUE;
    }


    public int hashCode2(String guestName, String guestPhone) {
        return
                Objects.hashCode(guestName + guestPhone) & Integer.MAX_VALUE;
    }

}
